package com.hinnotek.amoeba

import android.app.Application
import android.content.Context
import androidx.multidex.MultiDex
import cn.jiguang.analytics.android.api.JAnalyticsInterface
import cn.jpush.android.api.JPushInterface
import com.alibaba.android.arouter.launcher.ARouter
import com.hinnotek.amoeba.api.OKHttpUpdateHttpService
import com.lee.common.utils.InitUtils
import com.lee.common.utils.SharedPreUtils
import com.lee.common.utils.accessToken
import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager
import com.xuexiang.xupdate.XUpdate
import com.xuexiang.xupdate.entity.UpdateError.ERROR
import com.xuexiang.xupdate.utils.UpdateUtils
import com.xuexiang.xutil.tip.ToastUtils
import dagger.hilt.android.HiltAndroidApp
import timber.log.Timber
import timber.log.Timber.DebugTree


@HiltAndroidApp
class MyApplication : Application() {

    companion object {
        lateinit var application: Application
    }

    override fun onCreate() {
        application = this
        init()
        initARouter()
        super.onCreate()
    }



    private fun init(){
        if (BuildConfig.DEBUG) {
            Timber.plant(DebugTree())
            JPushInterface.setDebugMode(true)
        }
        JPushInterface.init(this)
        InitUtils.init(this)
        accessToken = SharedPreUtils.getString("token")

        XUpdate.get()
            .debug(true) //默认设置只在wifi下检查版本更新
            .isWifiOnly(false) //默认设置使用get请求检查版本
            .isGet(false) //默认设置非自动模式，可根据具体使用配置
            .isAutoMode(false) //设置默认公共请求参数
            .param("versionCode", UpdateUtils.getVersionCode(this))
            .param("appKey", packageName) //设置版本更新出错的监听
            .setOnUpdateFailureListener { error ->
                error.printStackTrace()
                //对不同错误进行处理
                if (error.code != ERROR.CHECK_NO_NEW_VERSION) {
                    ToastUtils.toast(error.toString())
                }
            } //设置是否支持静默安装，默认是true
            .supportSilentInstall(false) //这个必须设置！实现网络请求功能。
            .setIUpdateHttpService(OKHttpUpdateHttpService()) //这个必须初始化
            .init(this)

        QMUISwipeBackActivityManager.init(this)
        initJG()

    }

    private fun initARouter() {
        if (BuildConfig.DEBUG) {
            ARouter.openLog()
            ARouter.openDebug()
        }
        ARouter.init(this)
    }

    /**
     * 极光相关
     */
    private fun initJG() {
        //统计
        JAnalyticsInterface.init(this)
        if (BuildConfig.DEBUG) {
            JAnalyticsInterface.setDebugMode(true)
        } else {
            JAnalyticsInterface.initCrashHandler(this)
        }
    }

    /**
     * 方法数超过64k限制
     */
    override fun attachBaseContext(context: Context?) {
        super.attachBaseContext(context)
        MultiDex.install(this)
    }

}